package com.lg.edu.service.impl;

import com.lg.edu.config.EmailNotifierConfig;
import com.lg.edu.pojo.mail.EmailSymbol;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class EmailNotifier {

    @Autowired
    private EmailNotifierConfig emailNotifierConfig;

    /**
     * 发送邮件
     *
     * @param title        标题
     * @param content      内容
     * @param from         发件人（如果为空，则使用配置）
     * @param to           收件人（可多个，如果为空，则使用配置）
     * @param copyTo       抄送（可多个，如果为空，则不设置）
     * @param secretCopyTo 隐秘抄送（可多个，如果为空，则不设置）
     * @throws Exception 发送异常
     */
    public void sendEmail(String title, String content, String from, String to, String copyTo, String secretCopyTo) throws Exception {
        // 对象初始化
        SimpleMailMessage message = new SimpleMailMessage();

        // 标题
        if (StringUtils.isBlank(title)) {
            throw new Exception("标题不能为空！");
        }
        message.setSubject(title);

        // 内容
        if (StringUtils.isBlank(content)) {
            throw new Exception("内容不能为空！");
        }
        message.setText(content);

        // 发件人（为空则使用配置）
        if (StringUtils.isBlank(from)) {
            throw new Exception("发件人不能为空！");
        }
        message.setFrom(from);

        // 收件人（可多个，为空则使用配置）
        String[] toArray;
        if (StringUtils.isBlank(to)) {
            throw new Exception("收件人不能为空！");
        } else {
            toArray = getEmailAddresses(to);
        }
        message.setTo(toArray);

        // 抄送人（可多个）
        if (StringUtils.isNotBlank(copyTo)) {
            message.setCc(getEmailAddresses(copyTo));
        }

        // 隐秘抄送人（可多个）
        if (StringUtils.isNotBlank(secretCopyTo)) {
            message.setBcc(getEmailAddresses(secretCopyTo));
        }

        // 发送时间（默认当前时间）
        message.setSentDate(new Date());

        // 发送邮件
        emailNotifierConfig.getJavaMailSender().send(message);
    }

    /**
     * 获取邮箱列表
     *
     * @param addressStr
     * @return
     */
    private String[] getEmailAddresses(String addressStr) {
        if (StringUtils.isNotBlank(addressStr)) {
            if (addressStr.contains(EmailSymbol.SEPARATOR_COMMA)) {
                return addressStr.split(EmailSymbol.SEPARATOR_COMMA);
            } else if (addressStr.contains(EmailSymbol.SEPARATOR_SEMICOLON)) {
                return addressStr.split(EmailSymbol.SEPARATOR_SEMICOLON);
            } else {
                return new String[]{addressStr};
            }
        }
        return null;
    }

}
